package com.anti.modular.sys.role.service;

import cn.hutool.core.lang.Dict;
import com.anti.jdbc.support.page.PageParam;
import com.anti.jdbc.support.page.PageResult;
import com.anti.modular.sys.role.param.SysRoleParam;

import java.util.List;

/**
 * @Description TODO
 * @Author anTi
 * @Date 2021-2-26
 */
public interface SysRoleService {

    /**
     * 添加系统角色
     * @param sysRoleParam 添加参数
     */
    void add(SysRoleParam sysRoleParam);

    void delete(SysRoleParam sysRoleParam);

    void edit(SysRoleParam sysRoleParam);


    /**
     * 获取用户角色相关信息
     * @param userId 用户id
     * @return 增强版hashMap，格式：[{"id":456, "code":"zjl", "name":"总经理"}]
     */
    List<Dict> getLoginRoles(Long userId);

    /**
     * 查询系统角色
     * @param sysRoleParam 查询参数
     * @return 查询分页结果
     */
    PageResult page(PageParam pageParam, SysRoleParam sysRoleParam);


    /**
     * 查询角色拥有菜单
     * @param sysRoleParam 查询参数
     * @return 菜单id集合
     */
    List<Long> ownMenu(SysRoleParam sysRoleParam);

    /**
     * 授权菜单
     * @param sysRoleParam 授权参数
     */
    void saveGrantMenu(SysRoleParam sysRoleParam);



    /**
     * 授权数据
     * @param sysRoleParam 授权参数
     */
    void saveGrantData(SysRoleParam sysRoleParam);

    /**
     * 查询角色拥有数据
     * @param sysRoleParam 查询参数
     * @return 数据范围id集合
     */
    List<Long> ownData(SysRoleParam sysRoleParam);

    /**
     * 根据角色id集合获取数据范围id集合
     * @param roleIdList 角色id集合
     * @param orgId      机构id
     * @return 数据范围id集合
     */
    List<Long> getUserDataScopeIdList(List<Long> roleIdList, Long orgId);
}
